<?php

error_reporting(E_ALL);
/**
 * Versione dell'applicazione
 * @var String
 */
define("APP_VERSION", "0.0.9");
/**
 * True se si sceglie di lavorare in modalità debug
 * @var boolean
 */
define("DEBUG_MODE", FALSE);
/**
 * Definisce il nome dell'applicazione
 * @var String
 */
define("APP_NAME", "pwebuiapp");
/**
 * Directory virtuale dove sono installate le librerie e le applicazioni
 * @var String
 */
define("SITE_ROOT", "");
/**
 * Url del sito web 
 * @var String
 */
define("SITE_URL", str_replace("index.php", "", Config::curPageURL()));
Config::printDebug(SITE_URL);
/**
 * Url dove sono installate le librerie
 */
define("LIB_URL", SITE_URL . "/libs/");
Config::printDebug(LIB_URL);
/**
 * Document root del webserver
 * @var String
 */
define("ROOT_DOCS", dirname(__FILE__));
$search = preg_match("/\\" . DIRECTORY_SEPARATOR . "$/", ROOT_DOCS . DIRECTORY_SEPARATOR);
/**
 * Definisce il path della directory principale del sito dove sono memorizzate le librerie
 * @var String
 */
$rootLibSite = ROOT_DOCS;
/**
 * Definisce il path principale del sito dove sono memorizzate le applicazioni
 * @var String
 */
$rootAppSite = ROOT_DOCS;
// se il document root non termina con  il carattere di directory separetor aggiungilo
if (false === $search || $search > 0) {
    $rootLibSite = ROOT_DOCS . DIRECTORY_SEPARATOR;
}
// se è definito il path di installazione del sito allora concatenalo alla root
$rootLibSite .= SITE_ROOT . "libs" . DIRECTORY_SEPARATOR;
$rootAppSite .= SITE_ROOT;
////////////////////////////////////////////////////////////////////////////////////////////
//  CONFIGURE ADODB ///////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
define("DBLIB_PATH", $rootLibSite . "php" . DIRECTORY_SEPARATOR . "adodb5" . DIRECTORY_SEPARATOR);
///////////////////////////////////////////////////////////////////////////////////////////
//  Configura SMARTY /////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/**
 * Definisce il path di installazione della libreria smarty
 * @var String
 */
define('SMARTY_DIR', $rootLibSite . "php" . DIRECTORY_SEPARATOR . "Smarty" . DIRECTORY_SEPARATOR . "libs" . DIRECTORY_SEPARATOR);
///////////////////////////////////////////////////////////////////////////////////////////
//  Configura Applicazione ///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/**
 * Definisce il path di installazione dell'applicazione
 * @var String
 */
define("APP_PATH", $rootAppSite . DIRECTORY_SEPARATOR);
///////////////////////////////////////////////////////////////////////////////////////////
//  Configura Path inclusione ////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
ini_set("include_path", ini_get('include_path') . PATH_SEPARATOR . SMARTY_DIR . PATH_SEPARATOR . APP_PATH . PATH_SEPARATOR . DBLIB_PATH);
/** setta in character set a utf-8 * */
ini_set("default_charset", "utf-8");
if (DEBUG_MODE) {
    // in debug mode mostra errori
    ini_set("display_errors", "1");
} else {
    // nascondi errori
    ini_set("display_errors", "0");
}

/**
 * Oggetto che contiene la configurazione dell'applicazione
 * @author lucianogrippa
 */
class Config {

    /**
     * Driver che verrà utilizzato per la connessione
     * @var String
     */
    static $driver = "mysql";

    /**
     * E' possibile utilizzare per la connessione un dns
     * invece del classico metodo che specifica in modo separato 
     * nome utente , password , host , ecc, ecc
     * esempio dns
     * mysql://root:pwd@localhost/mydb
     * @var String
     */
    static $dns = null;

    /**
     * True se si desidera creare una connessione persistente
     * @var Boolean
     */
    static $isPersistentConnection = false;

    /**
     * Nome dell'host
     * @var String
     */
    static $dbHost = "192.168.10.80";

    /**
     * Nome Utente del datbase
     * @var String
     */
    static $dbUsername = "app_user";

    /**
     * Password del databse
     * @var String
     */
    static $dbPassword = "123456";

    /**
     * Porta del database
     * @var String
     */
    static $dbPort = null;

    /**
     * Nome del database
     * @var String
     */
    static $dbName = "test";

    /**
     * Stringa in formato iso della lingua utente
     * @var Array
     */
    static $lang;

    /**
     * Directory dove verranno installati i templates
     * @var String
     */
    public $smartyTemplateDir = "";

    /**
     * Directory dove verranno compilati i templates
     * @var String
     */
    public $smartyTemplateCDir = "";

    /**
     * Directory dove verranno memorizzate le configurazioni
     * @var String
     */
    public $smartyConfigDir = "";

    /**
     * Directory dove verrà gestita la cache
     * @var String
     */
    public $smartyCacheDir = "";

    /**
     * Inizializza le directory necessarie a smarty per gestire i templates
     */
    function __construct() {
        $this->smartyTemplateDir = APP_PATH . "Views" . DIRECTORY_SEPARATOR . "templates" . DIRECTORY_SEPARATOR;
        $this->smartyTemplateCDir = APP_PATH . "Views" . DIRECTORY_SEPARATOR . "templates_c" . DIRECTORY_SEPARATOR;
        $this->smartyConfigDir = APP_PATH . "Views" . DIRECTORY_SEPARATOR . "configs" . DIRECTORY_SEPARATOR;
        $this->smartyCacheDir = APP_PATH . "Views" . DIRECTORY_SEPARATOR . "cache" . DIRECTORY_SEPARATOR;
    }

    /**
     * Ottiene l'ul corrente della pagina
     * @return string 
     */
    static function curPageURL() {
        $pageURL = 'http';

        if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
            $pageURL .= "s";
        }
        $pageURL .= "://";
        if ($_SERVER["SERVER_PORT"] != "80") {
            $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
        } else {
            $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
        }
        return $pageURL;
    }

    /**
     * Scrive in output quando è abilitato il debug mode
     * @param void $var 
     */
    static function printDebug($var) {
        if (DEBUG_MODE)
            var_dump($var);
    }

    /**
     * Ritorna l'handler alla connessione del database
     * @return ADOConnection $conn
     */
    static function connectDb() {
        $conn = null;
        try {
            if (Config::$dns == NULL) {
                // tiene conto della porta di connessione
                if (Config::$dbPort != NULL)
                    Config::$dbHost.=":" . Config::$dbPort;
                // inizializza la connessione specificando il driver
                $conn = &NewADOConnection(Config::$driver);
                // verifica se è stata scelta la connessione persistente
                if (Config::$isPersistentConnection) {
                    $conn->PConnect(Config::$dbHost, Config::$dbUsername, Config::$dbPassword, Config::$dbName);
                } else {
                    $conn->Connect(Config::$dbHost, Config::$dbUsername, Config::$dbPassword, Config::$dbName);
                }
            } else {
                // se viene specificato il dns non è necessario eseguire la query di connessione
                $conn = &NewADOConnection(Config::$dns);
            }
        } catch (Exception $e) {
            Config::printDebug($e);
        }
        return $conn;
    }

}

?>